package com.mind.db;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

import org.apache.log4j.Logger;

import com.mind.db.DAOConstants.DBType;

public class DBConfig {
	private static final Logger logger = Logger.getLogger(DBConfig.class);
	private static final String DB_CONFIG_FILE = "config/db.properties";
	private static DBConfig dbConfig = null;
	/** 数据库服务器addr */
	private ServerAddr db_addr = null;
	/** 数据路类型 默认0=mongodb */
	private DBType db_type;
	/** 数据库名称 */
	private String db_name = null;
	/** 数据库连接数 */
	private short db_max_conn;
	/** 数据库登录用户名 */
	private String db_username = null;
	/** 数据库登录密码 */
	private String db_password = null;
	/**************************************
	 * 日志
	 *************************************/
	/** 数据库服务器addr */
	private ServerAddr log_db_addr = null;
	/** 数据路类型 默认0=mongodb */
	private DBType log_db_type;
	/** 数据库名称 */
	private String log_db_name = null;
	/** 数据库连接数 */
	private short log_db_max_conn;
	/** 数据库登录用户名 */
	private String log_db_username = null;
	/** 数据库登录密码 */
	private String log_db_password = null;

	/**
	 * 注：不用考虑同步问题，因为在服务器启动时 即会初始化
	 * 
	 * @return
	 */
	public static DBConfig getInstance() {
		if (dbConfig == null) {
			dbConfig = new DBConfig();
			dbConfig.init();
		}
		return dbConfig;
	}
	/**
	 * 数据库配置
	 * 
	 * @param properties
	 */
	private void init() {
		Properties properties = new Properties();
		try {
			File file=new File(ClassLoader.getSystemResource("").getPath()+DB_CONFIG_FILE);
			properties.load(new FileInputStream(file));
		} catch (IOException e) {
			e.printStackTrace();
		}
		/** 数据库服务器Ip */
		String addr = (String) properties.get("db_addr");
		if (addr == null || addr.length() == 0) {
			logger.error("配置的数据库Ip地址错误！");
			System.exit(0);
		}
		String[] addrs = addr.split(":");
		db_addr = new ServerAddr();
		db_addr.setIp(addrs[0]);
		db_addr.setPort(Short.parseShort(addrs[1]));

		/** 数据路类型 默认0=mongodb */
		int type = Integer.parseInt((String) properties.get("db_type"));

		this.db_type = DBType.getDAOType(type);
		/** 数据库服务器名称 */
		db_name = (String) properties.get("db_name");
		if (db_name == null || db_name.length() == 0) {
			logger.error("配置的数据库名称错误！");
			System.exit(0);
		}

		/** 数据库连接数 */
		this.db_max_conn = Short.parseShort((String) properties
				.get("db_max_conn"));
		if (db_max_conn <= 0) {
			logger.error("配置的数据库连接数错误！");
			System.exit(0);
		}
		/** 数据库服务器登录用户名 */
		db_username = (String) properties.get("db_username");

		/** 数据库服务器登录密码 */
		db_password = (String) properties.get("db_password");
		
		
		
		/** 数据库服务器Ip */
		String log_addr = (String) properties.get("log_db_addr");
		if (log_addr == null || log_addr.length() == 0) {
			logger.error("配置的log数据库Ip地址错误！");
			System.exit(0);
		}
		String[] log_addrs = addr.split(":");
		log_db_addr = new ServerAddr();
		log_db_addr.setIp(addrs[0]);
		log_db_addr.setPort(Short.parseShort(log_addrs[1]));

		/** 数据路类型 默认0=mongodb */
		short log_type = Short.parseShort((String) properties.get("log_db_type"));
		this.log_db_type = DBType.getDAOType(log_type);

		/** 数据库服务器名称 */
		log_db_name = (String) properties.get("log_db_name");
		if (log_db_name == null || log_db_name.length() == 0) {
			logger.error("配置的Log数据库名称错误！");
			System.exit(0);
		}

		/** 数据库连接数 */
		this.log_db_max_conn = Short.parseShort((String) properties
				.get("log_db_max_conn"));
		if (log_db_max_conn <= 0) {
			logger.error("配置的log数据库连接数错误！");
			System.exit(0);
		}
		/** 数据库服务器登录用户名 */
		log_db_username = (String) properties.get("log_db_username");

		/** 数据库服务器登录密码 */
		log_db_password = (String) properties.get("log_db_password");
	}

	public ServerAddr getDb_addr() {
		return db_addr;
	}

	public DBType getDb_type() {
		return db_type;
	}

	public String getDb_name() {
		return db_name;
	}

	public short getDb_max_conn() {
		return db_max_conn;
	}


	public String getDb_username() {
		return db_username;
	}

	public String getDb_password() {
		return db_password;
	}

	public ServerAddr getLog_db_addr() {
		return log_db_addr;
	}

	public DBType getLog_db_type() {
		return log_db_type;
	}

	public String getLog_db_name() {
		return log_db_name;
	}

	public short getLog_db_max_conn() {
		return log_db_max_conn;
	}

	public String getLog_db_username() {
		return log_db_username;
	}

	public String getLog_db_password() {
		return log_db_password;
	}

}
